import 'dart:core';

void main(List<String> args) {
  var c = 100;
  var d = 100;
  print(c.hashCode); // 100
  print(d.hashCode); // 100
  //说明：c 和 d 的值都是字面量编译时常量数字 1，所以他们的hashCode 相等

  var x = "123";
  var y = "123";
  print(x.hashCode);
  print(y.hashCode);
  print(x == y); // true
  // 说明 x 和 y  分别是两个字面量编译时常量，所以 x 和 y 相等

  var i = int.parse('123');
  var j = int.parse('0123');
  print(i.hashCode); // 123
  print(j.hashCode); // 123
  print("i 和 j 的比较结果:${x == y}"); // true
  //  int 直接判断数值就行。数字都可以看成常量

  var m = double.parse('12.3');
  var n = double.parse('12.3');
  print(m.hashCode);
  print(n.hashCode);
  print('m 和 n 的比较结果：${m == n}'); // true，数字看做常量

  var o = "123" + "456";
  var p = "123" + "456";
  print(o.hashCode);
  print(p.hashCode);
  print('o 和 p 的比较结果是 ：${o == p}'); // true
  // 说明，数字和字符串只要内容相等就是相等。

  var a = [];
  var b = [];
  print(a.hashCode);
  print(b.hashCode);
  print(a == b); // 输出 false
  // 说明： a 和 b 分别是两个不同的空数组，所以他们的hashCode 不相等。两个对象也不相等

  var e = const [1, 2, 4];
  var f = const [1, 2, 4];
  print(e.hashCode);
  print(f.hashCode);
  print(e == f); // true
  // 说明：e 和 f  都等于一个常量数组，这个常量数组在编译期间就确认了，所以 e == f

  var g = const {1: 1};
  var h = const {1: 1};
  print(g.hashCode);
  print(h.hashCode);
  print(g == h); // true，同理数组
}

// 总结 : 对于num类型和String类型的数据判断相等，只需判断内容相等即可
// 对于其他类型的数据是否相等，需要对比hashCode是否相等。是否是同一个对象。
